<?php
	function raid()
	{
		// Går igenom alla $_POST för att hitta del: och add:, dvs knapp har blivit tryckt
		foreach( $_POST AS $key => $value ) {
			// knapp för ta bort
			if( preg_match('/^del:(\w\w\w)$/', $key, $match) ) {
				$disk = $match[1];
				// gå genom raiden och partitionerna
				foreach( array('md0', 'md1', 'md2') AS $md ) {
					foreach( array('1', '2', '3') AS $partion ) {
						// markera felaktig
						exec('/sbin/mdadm /dev/'.$md.' -f /dev/.static/dev/'.$disk.$partion." > /dev/null 2> /dev/null");
						// plocka bort från raid
						exec('/sbin/mdadm /dev/'.$md.' -r /dev/.static/dev/'.$disk.$partion." > /dev/null 2> /dev/null");
					}
				}
			}
			// knapp för lägg till
			if( preg_match('/^add:(\w\w\w)$/', $key, $match) ) {
				$newdisk = $match[1];

				// läs in koppling mellan enhetsnamn (sd) och slot, sätt timeout för diskfel
				$disk2slot = array();
				$dh  = opendir('/sys/class/scsi_device/');
				while (false !== ($filename = readdir($dh))) {
					if( preg_match('/^([0-9]):/', $filename, $match) ) {
						$slot = $match[1];
						$dh2  = opendir('/sys/class/scsi_device/'.$filename.'/device/');
						while (false !== ($filename2 = readdir($dh2))) {
							if( preg_match('/^block:(.*)$/', $filename2, $match ) ) {
								$disk2slot[ $match[1] ] = $slot;

								// sätt timeout
								file_put_contents('/sys/class/scsi_disk/'.$slot.':0:0:0/device/timeout', "1\n");
							}
						}
					}
				}
				// spara koppling mellan enhetsnamn (sd) och slot i ../services/hardware/slot2dev
				$str = '';
				foreach( $disk2slot AS $dev => $slot )
					$str .= "$slot $dev\n";
				file_put_contents('../services/hardware/slot2dev', $str);

			     //för över partitionstabell från första bästa disk som nu finns i md0 till ny disk
				// läs in arraystat från proc
				$str = file_get_contents('/proc/mdstat');
				// läs in diskar kopplade till raid md0 & md1
				preg_match('/^md0 : active raid. ([a-z]*)/m', $str, $match);
				$raiddisk = $match[1];

				// för över partitionstabell
				$out = array();
				exec("/sbin/sfdisk -d /dev/$raiddisk | /sbin/sfdisk /dev/$newdisk > /dev/null 2> /dev/null", $out, $ret);
				// Om fel
				if( $ret != 0 ) {
					echo "\n<html><body>";
					echo "Ett fel($ret) skedde när partitionstabell skulle skrivas:<br>";
					foreach( $out AS $line )
						echo htmlentities($line);
					echo "</body></html>";
					exit;
				}
				
				// lägg till i raid
				exec('/sbin/mdadm /dev/md0 -a /dev/'.$newdisk.'1 > /dev/null 2> /dev/null');
				exec('/sbin/mdadm /dev/md1 -a /dev/'.$newdisk.'2 > /dev/null 2> /dev/null');
				exec('/sbin/mdadm /dev/md2 -a /dev/'.$newdisk.'3 > /dev/null 2> /dev/null');
			}
		}
	}

	switch( $_GET['t'] ) {
	default:
	case 'raid':
		raid();
		break;
	}
?>
